Bar code symbol locators are known that determine the location and orientation of bar code symbols in an image. Locators are also known that are adapted to locate other particular symbol types, such “data matrix codes”, or “MaxiCodes”. Further, in many applications, images of objects include many features in addition to symbols, such as text and/or pictures, and so symbol locators must distinguish between symbols, and text and/or pictures.
It is known to use boundary tracking to locate a symbol in an image. However, boundary tracking methods are sometimes distracted by features other than symbols in an image (e.g., text), resulting in computational inefficiencies, inaccuracies, and lack of robustness. Moreover, to determine whether a symbol has been found, typical boundary tracking methods require specific information about each possible symbology.
Each symbology typically has a non-data-dependent “finder pattern”. For example, each data matrix code includes a set of three concentric circles that can be used to help locate a data matrix code symbol. However, other symbologies employ other finder patterns. Further complicating the situation, finder patterns are usually relatively small with respect to the object, resulting in long search times, and high levels of confusion in known methods. In addition, distortion of the finder pattern in an image due to variations in perspective, package wrinkles, or overlaid markings, can further compromise the speed, reliability, and accuracy of known methods.
Some approaches to omnidirectional bar code location are known, but they typically have significant limitations. For example, regions of the image with similar coarse angle responses may be erroneously connected to form candidate bar code regions. Also, such techniques do not work well given a cluttered background, or when symbols are nearly touching, since known approaches tend to produce candidate regions that erroneously contain significant portions of the image, and extraneous symbols, in addition to the desired result.
Moreover, some techniques use a small number of orientation kernels, and consequently such techniques are only coarsely sensitive to orientation, and are particularly poor at detecting skewed symbols. Such techniques are also poor at distinguishing symbols from adjacent text, since both appear to be equivalently oriented to a coarse angle detector. Also, such techniques tend to erroneously produce many extra potential bar code or other regions, since they are incapable of discriminating at an early stage against, for example, text.